package com.wigem.approve.service;

import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wigem.framework.common.pojo.PageResult;
import com.wigem.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.wigem.approve.entity.DaqEstateEntity;
import com.wigem.approve.mapper.DaqEstateMapper;
import com.wigem.approve.vo.DaqEstateVo;
import com.wigem.framework.sa.token.core.UserInfo;
import com.wigem.framework.sa.token.core.util.SaTokenUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;

/**
 * 楼宇基本信息填报Service业务层处理
 *
 * @author DH
 * @date 2024-05-27
 */
@Service
public class DaqEstateServiceImpl implements DaqEstateService {

    @Resource
    private DaqEstateMapper daqEstateMapper;


    @Override
    public List<DaqEstateEntity> getList(DaqEstateVo daqEstatevo) {

        return daqEstateMapper.selectList(query(daqEstatevo));
    }

    @Override
    public PageResult<DaqEstateEntity> getPageList(DaqEstateVo daqEstateVo) {
        Page<DaqEstateEntity> page = new Page<>(daqEstateVo.getPageNo(), daqEstateVo.getPageSize());
        IPage<DaqEstateEntity> mappingList = daqEstateMapper.getPageList(page, daqEstateVo);
        return new PageResult<>(mappingList.getRecords(), mappingList.getTotal());
    }


    @Override
    public DaqEstateEntity getEntity(String id) {
        return daqEstateMapper.selectById(id);
    }

    @Override
    public DaqEstateEntity getEntityByPolicyId(String id) {
        return daqEstateMapper.getEntityByPolicyId(id);
    }

    @Override
    public void add(DaqEstateVo daqEstateVo) {
        DaqEstateEntity daqEstateEntity = new DaqEstateEntity();
        BeanUtils.copyProperties(daqEstateVo, daqEstateEntity);
        daqEstateEntity.create();
        daqEstateMapper.insert(daqEstateEntity);
    }


    @Override
    public void update(DaqEstateVo daqEstateVo) {
        DaqEstateEntity daqEstateEntity = new DaqEstateEntity();
        BeanUtils.copyProperties(daqEstateVo, daqEstateEntity);
        daqEstateMapper.updateById(daqEstateEntity);
    }

    @Override
    public void save(DaqEstateVo daqEstateVo) {
        UserInfo userInfo = SaTokenUtils.getLoginUserInfo();
        DaqEstateEntity daqEstateEntity = new DaqEstateEntity();
        BeanUtils.copyProperties(daqEstateVo, daqEstateEntity);
        if (StringUtils.isEmpty(daqEstateVo.getId())) {
            daqEstateEntity.create();
            daqEstateEntity.setRemoveMark("0");
            daqEstateEntity.setCreateTime(new Date());
            daqEstateEntity.setEstateId(userInfo.getAccount());
            DaqEstateVo daqEstateVo1 = new DaqEstateVo();
            //验证重复提交
            daqEstateVo1.setRemoveMark("0");
            daqEstateVo1.setEstateId(userInfo.getAccount());
            List<DaqEstateEntity> list = daqEstateMapper.getList(daqEstateVo1);
            if (list.size() <= 0) {
                daqEstateMapper.insert(daqEstateEntity);
            }
        } else {
            daqEstateMapper.updateById(daqEstateEntity);
        }
    }


    @Override
    public int delete(String id) {
        return daqEstateMapper.deleteById(id);
    }


    @Override
    public int remove(String id) {
        return daqEstateMapper.remove(id);
    }

    @Override
    public int removeByPolicyId(String id) {
        return daqEstateMapper.removeByPolicyId(id);
    }


    public LambdaQueryWrapperX<DaqEstateEntity> query(DaqEstateVo daqEstateVo) {

        LambdaQueryWrapperX<DaqEstateEntity> daqEstateEntityLambdaQueryWrapperX = new LambdaQueryWrapperX<>();
        daqEstateEntityLambdaQueryWrapperX = daqEstateEntityLambdaQueryWrapperX
                .eqIfPresent(DaqEstateEntity::getId, daqEstateVo.getId())
                .eqIfPresent(DaqEstateEntity::getEstateId, daqEstateVo.getEstateId())
                .likeIfPresent(DaqEstateEntity::getEstateName, daqEstateVo.getEstateName())
                .eqIfPresent(DaqEstateEntity::getEstateAddr, daqEstateVo.getEstateAddr())
                .eqIfPresent(DaqEstateEntity::getPropertyUnit, daqEstateVo.getPropertyUnit())
                .eqIfPresent(DaqEstateEntity::getPropertyUnitSocialCreditCode, daqEstateVo.getPropertyUnitSocialCreditCode())
                .eqIfPresent(DaqEstateEntity::getOperatingUnit, daqEstateVo.getOperatingUnit())
                .eqIfPresent(DaqEstateEntity::getOperatingUnitSocialCreditCode, daqEstateVo.getOperatingUnitSocialCreditCode())
                .eqIfPresent(DaqEstateEntity::getOperatingUnitLegalRepresentative, daqEstateVo.getOperatingUnitLegalRepresentative())
                .likeIfPresent(DaqEstateEntity::getOperatingUnitLinkmanName, daqEstateVo.getOperatingUnitLinkmanName())
                .eqIfPresent(DaqEstateEntity::getOperatingUnitLinkmanJob, daqEstateVo.getOperatingUnitLinkmanJob())
                .eqIfPresent(DaqEstateEntity::getOperatingUnitLinkmanPhone, daqEstateVo.getOperatingUnitLinkmanPhone())
                .eqIfPresent(DaqEstateEntity::getTotalArea, daqEstateVo.getTotalArea())
                .eqIfPresent(DaqEstateEntity::getOfficeArea, daqEstateVo.getOfficeArea())
                .eqIfPresent(DaqEstateEntity::getHotelArea, daqEstateVo.getHotelArea())
                .eqIfPresent(DaqEstateEntity::getResidentialArea, daqEstateVo.getResidentialArea())
                .eqIfPresent(DaqEstateEntity::getCommercialArea, daqEstateVo.getCommercialArea())
                .eqIfPresent(DaqEstateEntity::getOtherArea, daqEstateVo.getOtherArea())
                .eqIfPresent(DaqEstateEntity::getOwnershipUnitArea, daqEstateVo.getOwnershipUnitArea())
                .eqIfPresent(DaqEstateEntity::getOfficeLeasedArea, daqEstateVo.getOfficeLeasedArea())
                .eqIfPresent(DaqEstateEntity::getCommercialAverageRent, daqEstateVo.getCommercialAverageRent())
                .eqIfPresent(DaqEstateEntity::getOfficeAverageRent, daqEstateVo.getOfficeAverageRent())
                .eqIfPresent(DaqEstateEntity::getReportId, daqEstateVo.getReportId())
                .eqIfPresent(DaqEstateEntity::getRemoveMark, daqEstateVo.getRemoveMark())
                .eqIfPresent(DaqEstateEntity::getCreateTime, daqEstateVo.getCreateTime())
                .eqIfPresent(DaqEstateEntity::getUpdateUser, daqEstateVo.getUpdateUser())
                .eqIfPresent(DaqEstateEntity::getPolicyId, daqEstateVo.getPolicyId())
                .eqIfPresent(DaqEstateEntity::getFillPerson, daqEstateVo.getFillPerson())
                .eqIfPresent(DaqEstateEntity::getFillPhone, daqEstateVo.getFillPhone())

        ;
        return daqEstateEntityLambdaQueryWrapperX;
    }


}
